package com.dgut.app.controller;

import com.dgut.app.service.BillService;
import com.dgut.app.service.FileService;
import com.dgut.common.dto.BillDTO;
import com.dgut.common.dto.RemarkDTO;
import com.dgut.common.utils.R;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.util.Date;

/**
 * 账单管理
 * @author IT00ZYQ
 * @date 2021/4/13 15:19
 **/
@RequestMapping("/app/bill")
@RestController
public class BillController {

    private final BillService billService;
    public BillController(BillService billService) {
        this.billService = billService;
    }

    /**
     * 新增账单
     * @param dto 账单信息
     * @param token 用户登录令牌
     * @return R
     */
    @PostMapping
    public R addBill(@RequestBody @Valid BillDTO dto, @RequestHeader("token") String token) {
        billService.addBill(dto, token);
        return R.ok();
    }

    /**
     * 删除账单
     * @param id 账单ID
     * @return R
     */
    @DeleteMapping("/{id}")
    public R deleteBill(@PathVariable("id") Integer id) {
        billService.deletedBill(id);
        return R.ok();
    }

    /**
     * 获取指定时间范围的账单详情
     * @param begin 开始时间
     * @param end 结束时间
     * @param token 用户登录令牌
     * @return R
     */
    @GetMapping("/detail")
    public R detail(@RequestParam Date begin,
                    @RequestParam Date end,
                    @RequestHeader("token") String token) {
        return R.ok().data("detail", billService.billDetail(begin, end, token));
    }


    /**
     * 添加备注
     * @param dto 备注信息
     * @param token 用户登录令牌
     * @return R
     */
    @PostMapping("/remark")
    public R remark(@RequestBody @Valid RemarkDTO dto,
                    @RequestHeader("token") String token) {
        billService.addRemark(dto, token);
        return R.ok();
    }

    /**
     * 修改备注
     * @param dto 备注信息
     * @param token 用户登录令牌
     * @return R
     */
    @PutMapping("/remark")
    public R updateRemark(@RequestBody @Valid RemarkDTO dto,
                    @RequestHeader("token") String token) {
        billService.updateRemark(dto, token);
        return R.ok();
    }


    /**
     * 首页日历
     * @param date 年月
     * @param token 用户登录令牌
     * @return 日历信息
     */
    @GetMapping("/calendar")
    public R calendar(@RequestParam Date date, @RequestHeader("token") String token) {
        return R.ok().data("calendar", billService.billCalendar(date, token));
    }
}
